Go条件编译
在某个项目需要支持多平台时,某个功能可能需要针对不同平台编写专属这个平台的具体实现。 在c/c++中,不同平台的实现或者某个平台的特性往往通过#if
, #else
, #endif
这类预处理指令来配合 交叉编译达到。
go某种程度上也可以支持条件编译。go中的条件编译显得格外的隐蔽,并且条件编译也仅限于包级别。
假设某个服务,对外既提供HTTP服务,也可选的提供grpc服务。以此为例来说明如何支持可选的grpc。
go条件编译以一行特殊的 // +build
注释行开始。
为了跟包文档区分开,// +build
行后面必须跟一个空白行。
1 | /*错误: +build下没有用空白行分隔,build tag无法生效*/ |
在编译时,我们可以通过命令行: go build -tags=enable_rpc
来启动RPC服务。
+build
后面的tag也有讲究: 以
1 | // +build linux,386 darwin,!cgo 为例: |
go build子命令将其解释成:
1 | (linux AND 386) OR (darwin AND (NOT cgo)) |
当+build
以多行出现时,这些+build
之后的标签构成AND关系:
1 | // +build linux darwin |
go build子命令将其解释为:
1 | (linux OR darwin) AND 386 |
本文标题:Go条件编译
文章作者:小师
发布时间:2018-10-18
最后更新:2022-05-04
原始链接:chunlife.top/2018/10/18/go build条件编译/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可